package main

/*
beego orm是支持database/sql标准接口的ORM库，所以理论上来说，只要数据库驱动支持database/sql接口就可以无缝的接入beego orm。目前我测试过的驱动包括下面几个：
Mysql: github/go-mysql-driver/mysql
PostgreSQL: github.com/lib/pq
SQLite: github.com/mattn/go-sqlite3
Mysql: github.com/ziutek/mymysql/godrv

暂未支持数据库:
MsSql: github.com/denisenkom/go-mssqldb
MS ADODB: github.com/mattn/go-adodb
Oracle: github.com/mattn/go-oci8
ODBC: bitbucket.org/miquella/mgodbc

https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/05.5.md
*/

import (
	"fmt"
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql" // 导入数据库驱动
)

// Model
type User struct {
	Id   int
	Name string `orm:"size(100)"`
}

func init() {
	// 设置默认数据库
	orm.RegisterDataBase("default", "mysql", "root:1234@/godb?charset=utf8")
	// 注册定义的model
	orm.RegisterModel(new(User))
	// 也可注册多个：orm.RegisterModel(new(Userr),new(Prfile),new(Post))
	// 创建table
	orm.RunSyncdb("default", false, true)

	// 设置数据库最大空闲连接
	orm.SetMaxIdleConns("default", 30)
	// 设置数据库的最大数据库连接 (go >= 1.2)
	orm.SetMaxOpenConns("default", 30)
	// 显示调度信息
	orm.Debug = true
}

func main() {
	o := orm.NewOrm()
	user := User{Name: "slene"}
	// 插入表
	id, err := o.Insert(&user)
	fmt.Printf("Id: %d, ERR: %v\n", id, err)

	// 更新表
	user.Name = "dralee"
	num, err := o.Update(&user)
	fmt.Printf("NUm: %d, ERR: %v\n", num, err)

	// 读取one
	u := User{Id: user.Id}
	err = o.Read(&u)
	fmt.Printf("user:%v, ERR: %v\n", u, err)

	// 删除
	num, err = o.Delete(&u)
	fmt.Printf("NUM: %d, Err: %v\n", num, err)

}
